package com.company.ljh.medium;
/**
 * 3.无重复字符的最长子串
 * 给定一个字符串 s ，请你找出其中不含有重复字符的 最长子串 的长度。
 * 输入: s = "abcabcbb"
 * 输出: 3
 * 解释: 因为无重复字符的最长子串是 "abc"，所以其长度为 3。
 */

import java.util.HashSet;

/**
 * @description:
 * @projectName:leet_code
 * @see:com.company.ljh.medium
 * @author:ljh
 * @createTime:2022/5/29 21:55
 * @version:1.0
 */
public class 无重复字符的最长子串 {
    /**
     * 滑动窗口，维护无重复字符串窗口
     * @param s
     * @return
     */
    public int lengthOfLongestSubstring(String s) {
        HashSet<Character> set = new HashSet();
        char[] charArray = s.toCharArray();
        int max = 0;
        int start = 0;
        int end = 0;
        for(char c:charArray){
            if(set.contains(c)){
                while(charArray[start] != c){
                    set.remove(charArray[start++]);
                }
                set.remove(charArray[start++]);
            }
            set.add(c);
            max = Math.max(end-start+1,max);
            end++;
        }
        return max;
    }
}
